package ink.liaoxuefeng.javacore;

import com.sun.deploy.util.ArrayUtil;

import java.util.Arrays;
import java.util.List;
import java.util.Locale;

/**
 * @author wangzhuangzhuang
 * @DESC: 在Java中，String是一个引用类型，本身也是一个class，但是Java Compiler对String有特殊处理，可以直接用"..."来标识一个字符串
 * @date 2022-01-25 09:25
 */
public class StringDemo {
	public static void main(String[] args) {
		String str01 = "info";
		String str02 = new String(new char[] {'H', 'e', 'l', 'l', 'o'});
		// Java字符串重要特性： 字符串不可变，这种不可变性来自于 private final char[], 没有任何修改char[]的方法实现
		String str03 = "Hello";
		System.out.println(str03); // Hello
		String str04 = str03.toUpperCase();
		System.out.println(str04); // HELLO

		String info01 = "hello";
		String info02 = "hello";
		System.out.println(info01 == info02); // true
		System.out.println(info01.equals(info02)); // true
		/**
		 * ==和equals()比较都为true
		 * 单实际上只是Java编译器在编译期会自动把所有相同的字符串当作一个对象放入常量池中
		 * 记住： == 比较字符串返回true纯属巧合
		 * */
		System.out.println("==========================================");
		String info03 = "hello";
		String info04 = "HELLO".toLowerCase();
		System.out.println("info03: " + info03); // info03: hello
		System.out.println("info04: " + info04); // info04: hello
		System.out.println(info03 == info04); // false
		System.out.println(info03.equals(info04)); // true
		System.out.println("==========================================");
		/**
		 * 两个字符串比较，必须使用equals()方法
		 * 要忽略大小写比较则使用 equalsIgnoreCase()方法
		 * String类提供多种方法来搜索子串、提取子串
		 * */
		// 是否包含子串
		System.out.println("Hello".contains("ll")); // true

		/**
		 * 使用trim()去除字符串首尾空白
		 * 空白字符包括空格： \t、\r、\n
		 * trim()并没有改变字符串的内容而是返回一个新字符串
		 * */
		String info = "    hello world    ";
		System.out.println("info's length: " + info.length()); // info's length: 19
		System.out.println("info.trim()'s length: " + info.trim().length()); // info.trim()'s length: 11
		System.out.println("=================================================");
		/**
		 * isEmpty()和isBlank()来判断字符串是否为空和空白字符串
		 * */
		System.out.println("".isEmpty()); // true 因为字符串长度为0
		System.out.println(" ".isEmpty()); // false 因为字符串长度不为0

		System.out.println("========================分割字符串=================================");
		String alphabet = "A,B,C,D";
		String[] alphabetArr = alphabet.split("\\,");
		System.out.println(ArrayUtil.arrayToString(alphabetArr)); // A B C D

		System.out.println("========================拼接字符串=================================");
		String[] arr = {"A", "B", "C"};
		String res = String.join("***", arr);
		System.out.println("res: " + res); // res: A***B***C

		System.out.println("========================格式化字符串===============================");
		String formatInfo = "Hi %s, your score is %d!";
		System.out.println(String.format(formatInfo, "Alice", 80)); // Hi Alice, your score is 80!
		/**
		 * %s:字符串 %d:整数 %x:十六进制整数 %f:浮点数
		 * 进行浮点数格式化输出
		 * %.2f标识显示两位小数，【%s可以显示任何数据类型】
		 * */

		System.out.println("=================================================================");
		int[] scores = new int[]{88, 77, 51, 66};
		Score score = new Score(scores);
		score.printScores();
		scores[2] = 99;
		score.printScores();



	}



}